package com.kh.pajx.sop.base;

import java.util.List;

import com.kh.pajx.sop.domain.PageBean;
import com.kh.pajx.sop.util.page.QueryHelper;
import com.kh.pajx.sop.util.page.QueryHelperForManyTable;

/**
 * 通用数据持久化操作接口
 * 
 * @param <T>
 *            需进行持久化操作对象的类型
 * @author: azzcsimp
 * @Createdate: 2014年6月12日 下午3:24:03
 */
public interface IBaseDao<T> {

	/**
	 * 保存实体
	 * 
	 * @param entity
	 *            需要保存的实体对象
	 * @author: azzcsimp
	 * @Createdate: 2014年6月12日 下午3:20:53
	 */
	void save(T entity);

	/**
	 * 删除实体
	 * 
	 * @param id
	 *            需要删除实体的id标识
	 * @author: azzcsimp
	 * @Createdate: 2014年6月12日 下午3:20:46
	 */
	void delete(Long id);
	
	/**
	 * 删除实体
	 * @param uuid	需要删除实体的uuid标识
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月17日 下午5:25:05
	 */
	void delete(String uuid);

	/**
	 * 更新实体
	 * 
	 * @param entity
	 *            需要更新的实体对象
	 * @author: azzcsimp
	 * @Createdate: 2014年6月12日 下午3:20:37
	 */
	void update(T entity);

	/**
	 * 根据id查询对象
	 * 
	 * @param id
	 *            需要查询对象的id标识
	 * @return 符合条件的对象
	 * @author: azzcsimp
	 * @Createdate: 2014年6月12日 下午3:58:01
	 */
	T getById(Long id);
	
	/**
	 * 根据uuid查询对象
	 * @param uuid 需要查询对象的uuid标识
	 * @return	符合条件的对象
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月17日 下午5:25:39
	 */
	T getById(String uuid);

	/**
	 * 按id查询
	 * 
	 * @param ids
	 *            需要查询实体的id标识数组
	 * @return 符合条件的对象集合
	 * @author: azzcsimp
	 * @Createdate: 2014年6月12日 下午3:19:57
	 */
	List<T> getByIds(Long[] ids);
	
	/**
	 * 按id查询
	 * @param uuids  需要查询实体的id标识数组
	 * @return   符合条件的对象集合
	 * @author:	azzcsimp
	 * @Createdate:	2014年7月31日 上午11:32:34
	 */
	List<T> getByIds(String[] uuids);

	/**
	 * 查询所有
	 * @return
	 * @author: azzcsimp
	 * @Createdate: 2014年6月12日 下午3:21:09
	 */
	List<T> findAll();
	
	/**
	 * 通用分页查询
	 * @param pageNum 当前页
	 * @param pageSize 每页显示数据条数
	 * @param queryHelper	HQL语句与参数列表
	 * @return 分页数据对象
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月20日 下午3:38:53
	 */
	PageBean getPageBean(int pageNum, int pageSize, QueryHelper queryHelper);
	
	
	/**
	 * 通用分页查询 支持多表联合查询
	 * @param pageNum 当前页
	 * @param pageSize 每页显示数据条数
	 * @param queryHelper HQL语句与参数列表
	 * @return   分页数据对象
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月27日 上午11:44:48
	 */
	PageBean getPageBean(int pageNum, int pageSize, QueryHelperForManyTable queryHelper);
	
	/**
	 * 通用分页查询
	 * @param pageNum 当前页
	 * @param pageSize 每页显示数据条数
	 * @param listHQL 完整的查询列表语句
	 * @param countHQL 完整的查询条数语句
	 * @return	分页数据对象
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月26日 下午7:22:22
	 */
	PageBean getPageBean(int pageNum, int pageSize, String listHQL,
			String countHQL);
	
	/**
	 * 根据HQL查询列表
	 * @param queryString HQL语句
	 * @param values 参数
	 * @return   
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月27日 下午4:54:07
	 */
	List<T> findListByHql(String queryString, Object... values);
	
	/**
	 * 根据HQL查询列表
	 * @param queryString
	 * @param values
	 * @return   
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月27日 下午5:13:23
	 */
	List findListByHql2(String queryString, Object... values);
	
	/**
	 * 查询所有
	 * @param hql
	 * @return list
	 * @author: taller
	 * @Createdate: 2014年6月24日 下午3:51:09
	 */
	List<T> findList(String hql);
	
	
	/**
	 * 查询所有
	 * @param hql
	 * @return list
	 * @author: taller
	 * @Createdate: 2014年6月24日 下午3:51:09
	 */
	List getByJdbcSQL(String sql);
}
